// 协调 action 和 reducer 靠的是 store

// 干活的reducer
const reducer = (state = 0, action) => {
  console.log(state, action);
  // 基于action运算，返回一个新的状态
  if (action.type === 'decrement') {
    return state - 1;
  }
  if (action.type === 'increment') {
    return state + action.payload;
  }
  return state;
};
// 创建 store 协调者，需要一个reducer这个干活的
const store = createStore(reducer);
console.log('数据变化了', store.getState());

// store.dispatch({ type: 'decrement' });

console.log('数据变化了', store.getState());

// action creator
// const decrement = () => ({ type: 'decrement' });

// 订阅数据的变化
// const unSubscribe = store.subscribe(() =>
//   console.log('数据变化了', store.getState())
// );
// store用来发指令
// store.dispatch(decrement()); // 1
// 查看干活结果
// console.log(store.getState());
// store.dispatch({ type: 'decrement' }); // 2
// const unSubscribe = store.subscribe(() =>
//   console.log('数据变化了', store.getState())
// );
// 查看干活结果
// console.log(store.getState());
// store.dispatch({ type: 'increment', payload: 10 }); //
// 查看干活结果
// console.log(store.getState());
// 取消订阅
// unSubscribe();
// 之后的action执行结果就不订阅了
// store.dispatch({ type: 'decrement' }); // 2
// console.log(store.getState());

// // 需求，修改数字，每次减少 xx action
// const decrement1 = { type: 'decrement', payload: 1 };
// const decrement2 = { type: 'decrement', payload: 2 };

// // 使用一个函数来创建上面的对象
// const decrement = (payload) => {
//   return {
//     type: 'decrement',
//     payload: payload,
//   };
// };

// const decrementX = (payload) => ({ type: 'decrement', payload: payload });

// const decrement3 = decrement(3);
// console.log(decrement3);

// const decrement4 = decrementX(4);
// console.log(decrement4);

// const decrement5 = decrementX(5);
// console.log(decrement5);

// const decrement1 = { type: 'decrement', payload: 1 };
// // 模拟实现一个 reducer
// const reducer = (state = 0, action) => {
//   // 基于action运算，返回一个新的状态
//   if (action.type === 'decrement') {
//     return state - 1;
//   }
//   return state;
// };
// console.log(reducer(undefined, decrement1));
// // 输出 -2
// console.log(reducer(reducer(undefined, decrement1), decrement1));

// 核心，reducer 维护数据的方式，初始值，不停的通过action修改，
// 每次修改都是基于你上一次修改后的值。

// 如果用户传入一个未知action，我处理这个未知的action，把我的reducer至于
// 一个明确的状态值,原来是什么值，原封不动返回。

// const decrement333 = { type: 'xxxx', payload: 1 };
// console.log(reducer(undefined, decrement333));

// 协调 action 和 reducer =》store
